package cn.qidisoft.edu.hzjt.service.xb.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.qidisoft.core.common.code.QdfRespCode;
import cn.qidisoft.core.common.exception.dao.DBException;
import cn.qidisoft.core.common.log.LoggerAdapter;
import cn.qidisoft.core.common.log.LoggerAdapterFactory;
import cn.qidisoft.core.common.pagination.Page;
import cn.qidisoft.core.common.pagination.PaginationBean;
import cn.qidisoft.edu.hzjt.dao.xb.PartyEnrollSuperviseAttMapper;
import cn.qidisoft.edu.hzjt.dao.xb.PartyEnrollSuperviseMapper;
import cn.qidisoft.edu.hzjt.model.xb.PartyEnrollSuperviseAttEn;
import cn.qidisoft.edu.hzjt.model.xb.PartyEnrollSuperviseEn;
import cn.qidisoft.edu.hzjt.service.xb.IPartyEnrollSuperviseService;
import cn.qidisoft.edu.hzjt.utils.LogType;

@Service
public class PartyEnrollSuperviseServiceImpl implements IPartyEnrollSuperviseService {

	protected static final LoggerAdapter LOGGER = LoggerAdapterFactory
			.getLogger(LogType.HZJT_LOGGER.val);

	@Autowired
	private PartyEnrollSuperviseMapper mapper;

	@Autowired
	private PartyEnrollSuperviseAttMapper mapperAtt;

	@Override
	public List<PartyEnrollSuperviseEn> queryList(PartyEnrollSuperviseEn model) {
		return mapper.queryList(model);
	}

	@Override
	public PaginationBean<PartyEnrollSuperviseEn> queryPageList(PartyEnrollSuperviseEn model,
			Page page) {
		try {
			int totalRecords = mapper.queryPageListcount(model);

			PaginationBean<PartyEnrollSuperviseEn> pageHolder = new PaginationBean<>(page, totalRecords);
			List<PartyEnrollSuperviseEn> resultList = mapper
					.queryPageList(model,
							new RowBounds((pageHolder.getCurrentPage() - 1) * pageHolder.getPageSize(),
									pageHolder.getPageSize()));
			pageHolder.setPageList(resultList);
			return pageHolder;
		} catch (Exception e) {
			LOGGER.error("queryPageList [{}] error," + this.getClass().getName() + "=[{}]",
					this.getClass().getName(),
					ToStringBuilder.reflectionToString(model, ToStringStyle.SHORT_PREFIX_STYLE));
			throw new DBException(QdfRespCode.QDF_020002.getCode(), QdfRespCode.QDF_020002.getMsg(),
					e);
		}
	}

	@Override
	public PartyEnrollSuperviseEn queryByPK(PartyEnrollSuperviseEn model) {
		return mapper.queryByPK(model);
	}

	@Override
	public int insert(PartyEnrollSuperviseEn model) {
		return mapper.insert(model);
	}

	@Override
	public int update(PartyEnrollSuperviseEn model) {
		mapper.update(model);
		return 0;
	}

	@Override
	public int delete(PartyEnrollSuperviseEn model) {
		mapper.delete(model);
		return 0;
	}

	@Override
	public List<Map<String, Object>> queryAllYearList() {
		return mapper.queryAllYearList();
	}

	@Override
	public PaginationBean<PartyEnrollSuperviseEn> queryPageList2(PartyEnrollSuperviseEn model,
			Page page) {
		try {
			int totalRecords = mapper.queryPageListcount2(model);

			PaginationBean<PartyEnrollSuperviseEn> pageHolder = new PaginationBean<>(page, totalRecords);
			List<PartyEnrollSuperviseEn> resultList = mapper
					.queryPageList2(model,
							new RowBounds((pageHolder.getCurrentPage() - 1) * pageHolder.getPageSize(),
									pageHolder.getPageSize()));

			List<PartyEnrollSuperviseEn> lst = new ArrayList<>();
			PartyEnrollSuperviseAttEn att;
			for (PartyEnrollSuperviseEn partyEnrollSuperviseEn : resultList) {
				PartyEnrollSuperviseEn en = new PartyEnrollSuperviseEn();
				ConvertUtils.register(new DateConverter(null), java.util.Date.class);

				BeanUtils.copyProperties(en, partyEnrollSuperviseEn);
				att = new PartyEnrollSuperviseAttEn();
				att.setPyear(partyEnrollSuperviseEn.getJdNf());
				List<PartyEnrollSuperviseAttEn> attList = mapperAtt.queryList2(att);
				en.setjDNFYear(partyEnrollSuperviseEn.getJdNf()+"年");
				en.setAttList(attList);

				lst.add(en);
			}

			pageHolder.setPageList(lst);
			return pageHolder;
		} catch (Exception e) {
			LOGGER.error("queryPageList [{}] error," + this.getClass().getName() + "=[{}]",
					this.getClass().getName(),
					ToStringBuilder.reflectionToString(model, ToStringStyle.SHORT_PREFIX_STYLE));
			throw new DBException(QdfRespCode.QDF_020002.getCode(), QdfRespCode.QDF_020002.getMsg(),
					e);
		}
	}

	@Override
	public List<PartyEnrollSuperviseEn> exportList(PartyEnrollSuperviseEn model,
			Page page) {
		try {
			PaginationBean<PartyEnrollSuperviseEn> pageHolder = new PaginationBean<>(page, 999999);
			List<PartyEnrollSuperviseEn> resultList = mapper
					.queryPageList2(model,
							new RowBounds((pageHolder.getCurrentPage() - 1) * pageHolder.getPageSize(),
									pageHolder.getPageSize()));

			List<PartyEnrollSuperviseEn> lst = new ArrayList<>();
			PartyEnrollSuperviseAttEn att;
			for (PartyEnrollSuperviseEn partyEnrollSuperviseEn : resultList) {
				PartyEnrollSuperviseEn en = new PartyEnrollSuperviseEn();
				ConvertUtils.register(new DateConverter(null), java.util.Date.class);

				BeanUtils.copyProperties(en, partyEnrollSuperviseEn);
				att = new PartyEnrollSuperviseAttEn();
				att.setPyear(partyEnrollSuperviseEn.getJdNf());
				List<PartyEnrollSuperviseAttEn> attList = mapperAtt.queryList2(att);
				en.setjDNFYear(partyEnrollSuperviseEn.getJdNf()+"年");
				en.setAttList(attList);

				lst.add(en);
			}

			return lst;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}
